/**************************************************************************** 
 * Meta，一个轻量级的静态分区Hypervisor 
 *
 * 版权(c) , 2022-
 *
 * 作者:
 *      Tupelo Shen <shenwanjiang2013@163.com>
 *
 * Meta是一个自由软件，你可以在遵循GNU GPLv2协议的条件下，重新修改并发布它。
 *
 ***************************************************************************/

#ifndef __CACHE_H__
#define __CACHE_H__

#include <meta.h>
#include <arch/cache.h>

struct cache {
    /* cache等级 */
    size_t lvls;
    /* 最小共享cache等级 */
    size_t min_shared_lvl;
    enum { UNIFIED, SEPARATE, DATA, INSTRUCTION } type[CACHE_MAX_LVL];
    enum { PIPT, VIPT } indexed[CACHE_MAX_LVL][2];
    size_t line_size[CACHE_MAX_LVL][2];
    size_t assoc[CACHE_MAX_LVL][2];
    size_t numset[CACHE_MAX_LVL][2];
};

extern size_t COLOR_NUM;
extern size_t COLOR_SIZE;

/****************************************************************************
 ************************** 公共函数接口 ************************************
 ****************************************************************************/
void cache_enumerate();
void cache_flush_range(vaddr_t base, size_t size);

void cache_arch_enumerate(struct cache* dscrp);

#endif /* __CACHE_H__ */
